options(max.print=1000000)
library(readxl)
library(dplyr)
fileName <- "ANZ synthesised transaction dataset.xlsx"
df <- as.data.frame(read_xlsx(fileName))
Expecting numeric in C3052 / R3052C3: got 'THE DISCOUNT CHEMIST GROUP'Expecting numeric in C4360 / R4360C3: got 'LAND WATER & PLANNING East Melbourne'
xl <- df
# df %>%  rmarkdown::paged_table()
# for (i in seq_along(1:ncol(df)))
# {
#   print(paste("Column ", i, " = ", sum(is.na(df[i]))))
# }
summary(df$amount)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.10   16.00   29.00  187.93   53.66 8835.98 
df
#print(df[, 'amount'])
### Average Transaction amount ###
avg_transaction <- mean(df$amount)
{
  plot(avg_transaction, ylab="Average Transaction")
  abline(h=avg_transaction, col='blue')
  legend("topright", legend=paste("Mean: ", round(avg_transaction, digits=2)),
       col="blue", lty=1:2, cex=0.8)
  title(expression(phantom("title (") * "Average Transaction Amount"), col.main = "purple")
}

library(dplyr)
library(ggplot2)
df$date <- as.Date(df$date)
week_var <- strftime(df$date, format = "%V")
week_var <- factor(week_var)
amount_spent_weekly <- aggregate(df$amount, list(week_var), sum)
week_numbers <- c()
week_start <- as.numeric(amount_spent_weekly$Group.1[1])
week_end <- length(amount_spent_weekly$Group.1)
for (i in seq_along(week_start:week_end)){
  week_numbers <- append(week_numbers, i+1 - week_start)
}
{
  png(filename="weekly_amount.png", width=1350, height=600)
  
  ### ggplot init
  
  plt <- ggplot(amount_spent_weekly, aes(week_numbers, x, group=1))
  
  ### Labels
  
  l <- labs(x="Week", y="Amount", title="Amount by week")
  
  ### theme start
  
  t<- theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, size=12, face="bold", colour = "blue"), 
            plot.title = element_text(size=16, face= "bold", colour= "brown" ),
    axis.title.x = element_text(size=14, face="bold", colour = "orange"),    
    axis.title.y = element_text(size=14, face="bold", colour = "orange"),    
    #axis.text.x = element_text(size=12, face="bold", colour = "black"), 
    axis.text.y = element_text(size=12, face="bold", colour = "blue")) 
  
  ###theme end
  
  print(plt+geom_point(size=6, col="red")+geom_line(color="blue", size=1)+l+t + scale_x_continuous(breaks=seq(1, 14, 1)))
  dev.off()
}
null device 
          1 
  print(plt+geom_point(size=6, col="red")+geom_line(color="blue", size=1)+l+t + scale_x_continuous(breaks=seq(1, 14, 1)))

library(lubridate)
library(dplyr)
library(collapsibleTree)
amount_account_data <- c()
df <- arrange(df, factor(df$account))
account_fact <- factor(df$account)
p <- aggregate(df$amount, list(account_fact), sum)
customer_id_fact <- factor(df$customer_id)
amount_account_data <- append(amount_account_data, p)
z <- c()
for (o in levels(customer_id_fact)){
  z <- append(z, o) #z
}
z <- bind_rows(as.data.frame(z))
amount_account_data <- append(amount_account_data, z)
#library(webshot)
z1 <- c()
namesA <- c()
for (k in seq_along(1:100)){
  namesA <- filter(df, df$account == amount_account_data$Group.1[k]) 
  z1 <- append(z1, namesA$first_name[1])
}
z1 <- bind_rows(as.data.frame(z1))
amount_account_data <- append(amount_account_data, z1)
amount_account_data <- as.data.frame(amount_account_data)
# widgetToPng <- function(widget, file = "widget.png",  ...) {
#   temp <- tempfile(fileext = ".html")
#   file <- R.utils::getAbsolutePath(file)
#   htmlwidgets::saveWidget(widget, temp)
#   webshot(
#     temp, file,
#     selector = "#htmlwidget_container",
#     zoom = 2,
#     delay = 0.5,
#     ...
#   )
# }
# widgetToPng(
#   collapsibleTreeSummary(
#   amount_account_data,
#   hierarchy = c("z1", "Group.1", "z", 'x'),
#   width = 1100,
#   height=1400,
#   collapsed = FALSE,
#   maxPercent = 50,
#   root = "Customer Details",
#   zoomable = FALSE
# ),
#   "CustomerDetailsTree.png"
# )
c <- collapsibleTree(
  amount_account_data,
  hierarchy = c("z1", "Group.1", "z", 'x'),
  root = "Customer Details",
  width = 1100,
  height=1400,
  zoomable = FALSE,
  collapsed = TRUE,
)
htmltools::save_html(c, file='CustomerDetailsTree.html')

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCmBgYHtyfQ0Kb3B0aW9ucyhtYXgucHJpbnQ9MTAwMDAwMCkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShkcGx5cikNCmZpbGVOYW1lIDwtICJBTlogc3ludGhlc2lzZWQgdHJhbnNhY3Rpb24gZGF0YXNldC54bHN4Ig0KZGYgPC0gYXMuZGF0YS5mcmFtZShyZWFkX3hsc3goZmlsZU5hbWUpKQ0KeGwgPC0gZGYNCiMgZGYgJT4lICBybWFya2Rvd246OnBhZ2VkX3RhYmxlKCkNCg0KIyBmb3IgKGkgaW4gc2VxX2Fsb25nKDE6bmNvbChkZikpKQ0KIyB7DQojICAgcHJpbnQocGFzdGUoIkNvbHVtbiAiLCBpLCAiID0gIiwgc3VtKGlzLm5hKGRmW2ldKSkpKQ0KIyB9DQpzdW1tYXJ5KGRmJGFtb3VudCkNCmRmDQojcHJpbnQoZGZbLCAnYW1vdW50J10pDQoNCmBgYA0KYGBge3J9DQoNCg0KIyMjIEF2ZXJhZ2UgVHJhbnNhY3Rpb24gYW1vdW50ICMjIw0KYXZnX3RyYW5zYWN0aW9uIDwtIG1lYW4oZGYkYW1vdW50KQ0KDQp7DQogIHBsb3QoYXZnX3RyYW5zYWN0aW9uLCB5bGFiPSJBdmVyYWdlIFRyYW5zYWN0aW9uIikNCiAgYWJsaW5lKGg9YXZnX3RyYW5zYWN0aW9uLCBjb2w9J2JsdWUnKQ0KICBsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kPXBhc3RlKCJNZWFuOiAiLCByb3VuZChhdmdfdHJhbnNhY3Rpb24sIGRpZ2l0cz0yKSksDQogICAgICAgY29sPSJibHVlIiwgbHR5PTE6MiwgY2V4PTAuOCkNCiAgdGl0bGUoZXhwcmVzc2lvbihwaGFudG9tKCJ0aXRsZSAoIikgKiAiQXZlcmFnZSBUcmFuc2FjdGlvbiBBbW91bnQiKSwgY29sLm1haW4gPSAicHVycGxlIikNCn0NCmBgYA0KYGBge3J9DQoNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpkZiRkYXRlIDwtIGFzLkRhdGUoZGYkZGF0ZSkNCndlZWtfdmFyIDwtIHN0cmZ0aW1lKGRmJGRhdGUsIGZvcm1hdCA9ICIlViIpDQp3ZWVrX3ZhciA8LSBmYWN0b3Iod2Vla192YXIpDQphbW91bnRfc3BlbnRfd2Vla2x5IDwtIGFnZ3JlZ2F0ZShkZiRhbW91bnQsIGxpc3Qod2Vla192YXIpLCBzdW0pDQp3ZWVrX251bWJlcnMgPC0gYygpDQp3ZWVrX3N0YXJ0IDwtIGFzLm51bWVyaWMoYW1vdW50X3NwZW50X3dlZWtseSRHcm91cC4xWzFdKQ0Kd2Vla19lbmQgPC0gbGVuZ3RoKGFtb3VudF9zcGVudF93ZWVrbHkkR3JvdXAuMSkNCmZvciAoaSBpbiBzZXFfYWxvbmcod2Vla19zdGFydDp3ZWVrX2VuZCkpew0KICB3ZWVrX251bWJlcnMgPC0gYXBwZW5kKHdlZWtfbnVtYmVycywgaSsxIC0gd2Vla19zdGFydCkNCn0NCg0Kew0KICBwbmcoZmlsZW5hbWU9IndlZWtseV9hbW91bnQucG5nIiwgd2lkdGg9MTM1MCwgaGVpZ2h0PTYwMCkNCiAgDQogICMjIyBnZ3Bsb3QgaW5pdA0KICANCiAgcGx0IDwtIGdncGxvdChhbW91bnRfc3BlbnRfd2Vla2x5LCBhZXMod2Vla19udW1iZXJzLCB4LCBncm91cD0xKSkNCiAgDQogICMjIyBMYWJlbHMNCiAgDQogIGwgPC0gbGFicyh4PSJXZWVrIiwgeT0iQW1vdW50IiwgdGl0bGU9IkFtb3VudCBieSB3ZWVrIikNCiAgDQogICMjIyB0aGVtZSBzdGFydA0KICANCiAgdDwtIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xLCBzaXplPTEyLCBmYWNlPSJib2xkIiwgY29sb3VyID0gImJsdWUiKSwgDQogICAgICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTYsIGZhY2U9ICJib2xkIiwgY29sb3VyPSAiYnJvd24iICksDQogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemU9MTQsIGZhY2U9ImJvbGQiLCBjb2xvdXIgPSAib3JhbmdlIiksICAgIA0KICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplPTE0LCBmYWNlPSJib2xkIiwgY29sb3VyID0gIm9yYW5nZSIpLCAgICANCiAgICAjYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT0xMiwgZmFjZT0iYm9sZCIsIGNvbG91ciA9ICJibGFjayIpLCANCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPTEyLCBmYWNlPSJib2xkIiwgY29sb3VyID0gImJsdWUiKSkgDQogIA0KICAjIyN0aGVtZSBlbmQNCiAgDQogIHByaW50KHBsdCtnZW9tX3BvaW50KHNpemU9NiwgY29sPSJyZWQiKStnZW9tX2xpbmUoY29sb3I9ImJsdWUiLCBzaXplPTEpK2wrdCArIHNjYWxlX3hfY29udGludW91cyhicmVha3M9c2VxKDEsIDE0LCAxKSkpDQogIGRldi5vZmYoKQ0KfQ0KICBwcmludChwbHQrZ2VvbV9wb2ludChzaXplPTYsIGNvbD0icmVkIikrZ2VvbV9saW5lKGNvbG9yPSJibHVlIiwgc2l6ZT0xKStsK3QgKyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPXNlcSgxLCAxNCwgMSkpKQ0KDQoNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoY29sbGFwc2libGVUcmVlKQ0KDQphbW91bnRfYWNjb3VudF9kYXRhIDwtIGMoKQ0KDQpkZiA8LSBhcnJhbmdlKGRmLCBmYWN0b3IoZGYkYWNjb3VudCkpDQoNCmFjY291bnRfZmFjdCA8LSBmYWN0b3IoZGYkYWNjb3VudCkNCnAgPC0gYWdncmVnYXRlKGRmJGFtb3VudCwgbGlzdChhY2NvdW50X2ZhY3QpLCBzdW0pDQpjdXN0b21lcl9pZF9mYWN0IDwtIGZhY3RvcihkZiRjdXN0b21lcl9pZCkNCmFtb3VudF9hY2NvdW50X2RhdGEgPC0gYXBwZW5kKGFtb3VudF9hY2NvdW50X2RhdGEsIHApDQp6IDwtIGMoKQ0KZm9yIChvIGluIGxldmVscyhjdXN0b21lcl9pZF9mYWN0KSl7DQogIHogPC0gYXBwZW5kKHosIG8pICN6DQp9DQp6IDwtIGJpbmRfcm93cyhhcy5kYXRhLmZyYW1lKHopKQ0KYW1vdW50X2FjY291bnRfZGF0YSA8LSBhcHBlbmQoYW1vdW50X2FjY291bnRfZGF0YSwgeikNCg0KDQpgYGANCg0KYGBge3J9DQojbGlicmFyeSh3ZWJzaG90KQ0KejEgPC0gYygpDQpuYW1lc0EgPC0gYygpDQoNCmZvciAoayBpbiBzZXFfYWxvbmcoMToxMDApKXsNCiAgbmFtZXNBIDwtIGZpbHRlcihkZiwgZGYkYWNjb3VudCA9PSBhbW91bnRfYWNjb3VudF9kYXRhJEdyb3VwLjFba10pIA0KICB6MSA8LSBhcHBlbmQoejEsIG5hbWVzQSRmaXJzdF9uYW1lWzFdKQ0KfQ0KejEgPC0gYmluZF9yb3dzKGFzLmRhdGEuZnJhbWUoejEpKQ0KYW1vdW50X2FjY291bnRfZGF0YSA8LSBhcHBlbmQoYW1vdW50X2FjY291bnRfZGF0YSwgejEpDQphbW91bnRfYWNjb3VudF9kYXRhIDwtIGFzLmRhdGEuZnJhbWUoYW1vdW50X2FjY291bnRfZGF0YSkNCg0KIyB3aWRnZXRUb1BuZyA8LSBmdW5jdGlvbih3aWRnZXQsIGZpbGUgPSAid2lkZ2V0LnBuZyIsICAuLi4pIHsNCiMgICB0ZW1wIDwtIHRlbXBmaWxlKGZpbGVleHQgPSAiLmh0bWwiKQ0KIyAgIGZpbGUgPC0gUi51dGlsczo6Z2V0QWJzb2x1dGVQYXRoKGZpbGUpDQojICAgaHRtbHdpZGdldHM6OnNhdmVXaWRnZXQod2lkZ2V0LCB0ZW1wKQ0KIyAgIHdlYnNob3QoDQojICAgICB0ZW1wLCBmaWxlLA0KIyAgICAgc2VsZWN0b3IgPSAiI2h0bWx3aWRnZXRfY29udGFpbmVyIiwNCiMgICAgIHpvb20gPSAyLA0KIyAgICAgZGVsYXkgPSAwLjUsDQojICAgICAuLi4NCiMgICApDQojIH0NCiMgd2lkZ2V0VG9QbmcoDQojICAgY29sbGFwc2libGVUcmVlU3VtbWFyeSgNCiMgICBhbW91bnRfYWNjb3VudF9kYXRhLA0KIyAgIGhpZXJhcmNoeSA9IGMoInoxIiwgIkdyb3VwLjEiLCAieiIsICd4JyksDQojICAgd2lkdGggPSAxMTAwLA0KIyAgIGhlaWdodD0xNDAwLA0KIyAgIGNvbGxhcHNlZCA9IEZBTFNFLA0KIyAgIG1heFBlcmNlbnQgPSA1MCwNCiMgICByb290ID0gIkN1c3RvbWVyIERldGFpbHMiLA0KIyAgIHpvb21hYmxlID0gRkFMU0UNCiMgKSwNCiMgICAiQ3VzdG9tZXJEZXRhaWxzVHJlZS5wbmciDQojICkNCmMgPC0gY29sbGFwc2libGVUcmVlKA0KICBhbW91bnRfYWNjb3VudF9kYXRhLA0KICBoaWVyYXJjaHkgPSBjKCJ6MSIsICJHcm91cC4xIiwgInoiLCAneCcpLA0KICByb290ID0gIkN1c3RvbWVyIERldGFpbHMiLA0KICB3aWR0aCA9IDExMDAsDQogIGhlaWdodD0xNDAwLA0KICB6b29tYWJsZSA9IEZBTFNFLA0KICBjb2xsYXBzZWQgPSBUUlVFLA0KKQ0KaHRtbHRvb2xzOjpzYXZlX2h0bWwoYywgZmlsZT0nQ3VzdG9tZXJEZXRhaWxzVHJlZS5odG1sJykNCg0KYGBgDQoNCmBgYHtyfQ0KcDE8LWRhdGEuZnJhbWUoKQ0KcDEgPC0gYWdncmVnYXRlKGRmJGFtb3VudCwgbGlzdChhY2NvdW50X2ZhY3QpLCBtZWFuKQ0KDQp7DQogIHBuZyhmaWxlbmFtZT0ib3V0bGllcnMucG5nIiwgd2lkdGg9MTM1MCwgaGVpZ2h0PTYwMCkNCiAgDQogICMjIyBMYWJlbHMNCiAgDQogIGwxIDwtIGxhYnMoeD0iTmFtZXMiLCB5PSJBdmVyYWdlIFZhbHVlIiwgdGl0bGU9Ik91dGxpZXJzIiwgY29sb3VyPSdPdXRsaWVycycsIHNpemU9MTQpDQogIA0KICAjIyMgVGhlbWUgU3RhcnQNCiAgICAgIA0KICB0PC0gdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gYyguOTgsIC45OCksIGxlZ2VuZC5qdXN0aWZpY2F0aW9uID0gYygicmlnaHQiLCAidG9wIiksYXhpcy50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTEyKSwgYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xNCxmYWNlPSJib2xkIiksIA0KICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KGNvbG91cj0ncmVkJywgc2l6ZT0xOSksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xLCBzaXplPTEyKSkNCiAgDQogICMjIyBHZW9tX1BvaW50DQogIGdwIDwtIGdlb21fcG9pbnQoY29sPSdibHVlJywgc2l6ZT00KQ0KICANCiAgIyMjIEdlb21fVGV4dA0KICBndCA8LSBnZW9tX3RleHQoYWVzKGxhYmVsPSBpZmVsc2UocDFbLCAneCddID4gcXVhbnRpbGUocDFbLCAneCddLCAwLjk3KSB8IHAxWywgJ3gnXSA8IHF1YW50aWxlKHAxWywgJ3gnXSwgMC4wMSksDQogICAgIGFzLmNoYXJhY3RlcihwMVssICdHcm91cC4xJ10pLCcnKSksaGp1c3Q9MCx2anVzdD0xLHNpemU9NixzaG93LmxlZ2VuZCA9VCkNCiAgIyMjIExhcHBseSwgZ2dwbG90DQogIGxpc3RfcGxvdHMgPC0gbGFwcGx5KHAxWy0xXSwgZnVuY3Rpb24oZGF0YSkgDQogICAgIGdncGxvdChwMSwgYWVzKHg9IEdyb3VwLjEsIHkgPSB4LCBjb2xvdXI9J29yYW5nZScsIGxhYmVsPXAxWywgJ0dyb3VwLjEnXSkpICsgdCArIGwxICsgZ3AgKyBndCkNCg0KICBwcmludChsaXN0X3Bsb3RzW1sxXV0pDQogIGRldi5vZmYoKQ0KfQ0KDQoNCmBgYA0KDQo=